#include <iostream>
#include <vector>
#include <algorithm>
#include <stdexcept>
using namespace std;

struct person
{
    int x, y;
    person(int a, int b) : x(a), y(b) {}
};

// 比较函数，按 x * y 排序
bool compare(const person &p1, const person &p2)
{
    return (p1.x * p1.y) < (p2.x * p2.y);
}

// 高精度乘法函数
vector<int> mul(const vector<int> &x, const vector<int> &y)
{
    int n = x.size(), m = y.size();
    vector<int> ans(m + n + 10, 0); // 多余的空间用于存储进位
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            ans[i + j] += x[i] * y[j];
            ans[i + j + 1] += ans[i + j] / 10; // 进位
            ans[i + j] %= 10;                  // 当前位取余
        }
    }
    // 去除多余的前导零
    while (ans.size() > 1 && ans.back() == 0)
        ans.pop_back();
    return ans;
}

// 高精度除法函数
vector<int> highPrecisionDiv(const vector<int> &dividend, int divisor)
{
    if (divisor == 0)
    {
        throw invalid_argument("Divisor cannot be zero.");
    }
    vector<int> result;
    int remainder = 0;
    for (int digit : dividend)
    {
        int current_digit = remainder * 10 + digit;
        result.push_back(current_digit / divisor);
        remainder = current_digit % divisor;
    }
    // 删除前导零
    while (!result.empty() && result.front() == 0)
    {
        result.erase(result.begin());
    }
    if (result.empty())
    { // 如果结果为空，说明商为 0
        result.push_back(0);
    }
    return result;
}

// 将一个整数转换为高精度表示
vector<int> func(int x)
{
    vector<int> temp;
    while (x)
    {
        temp.push_back(x % 10);
        x /= 10;
    }
    return temp;
}

// 比较两个高精度数字大小，返回较大的数字
vector<int> bijiao(const vector<int> &a, const vector<int> &b)
{
    if (a.size() > b.size())
    {
        return a;
    }
    else if (a.size() < b.size())
    {
        return b;
    }
    else
    {
        for (int i = 0; i < a.size(); i++)
        {
            if (a[i] > b[i])
            {
                return a;
            }
            else if (b[i] > a[i])
            {
                return b;
            }
        }
    }
    return a; // 如果相等，则返回任意一个
}

int main()
{
    int n;
    cin >> n;
    int a, b;
    cin >> a >> b;

    // 初始化 nums 数组
    vector<person> nums;
    nums.push_back(person(a, b));

    // 读取输入数据
    for (int i = 0; i < n; i++)
    {
        int x, y;
        cin >> x >> y;
        nums.push_back(person(x, y));
    }

    // 按 x * y 排序
    sort(nums.begin() + 1, nums.end(), compare);

    vector<int> left = func(a); // 初始 left
    vector<int> res = {0};      // 初始结果

    // 处理每个数值
    for (int i = 1; i <= n; i++)
    {
        if (i == 1)
        {
            left = func(nums[i - 1].x);

            vector<int> div = left;

            reverse(div.begin(), div.end());
            vector<int> resr = highPrecisionDiv(div, nums[i].y);

            // 选择较大的结果
            res = bijiao(res, resr);
            continue;
        }
        vector<int> k = func(nums[i - 1].x);
        left = mul(k, left); // 进行乘法

        // 执行除法并反转结果
        vector<int> div = left;

        reverse(div.begin(), div.end());
        vector<int> resr = highPrecisionDiv(div, nums[i].y);

        // 选择较大的结果
        res = bijiao(res, resr);
    }

    // 输出结果
    for (auto s : res)
    {
        cout << s;
    }
    cout << endl;

    return 0;
}


